import Request from './request'
import Base from '@/utils/base.js'
import store from '@/store/index.js'
import {
	getLogininfo
} from '@/caches/smallcache/smallcache.js'

//封装获取 Request方法
function gethttp(baseurl) {
	const http = new Request()
	http.setConfig((config) => {
		/* 设置全局配置 */
		config.baseUrl = baseurl || Base.requestUrl() /* 根域名不同 */
		config.header = {
			'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
		}
		return config
	})
	/**
	 * 自定义验证器，如果返回true 则进入响应拦截器的响应成功函数(resolve)，否则进入响应拦截器的响应错误函数(reject)
	 * @param { Number } statusCode - 请求响应体statusCode（只读）
	 * @return { Boolean } 如果为true,则 resolve, 否则 reject
	 */
	http.validateStatus = (statusCode) => {
		return statusCode === 200 || statusCode === 500
	}

	http.interceptor.request((config, cancel) => {
		/* 请求之前拦截器 */
		// 把token和id加入请求参数中

		if (getLogininfo().admin_token) {
			let newparam = JSON.parse(config.data.send);
			newparam.admin_token = getLogininfo().admin_token;
			newparam.admin_id = getLogininfo().admin_id;
			config.data.send = JSON.stringify(newparam);
		}


		/*
		if (!token) { // 如果token不存在，调用cancel 会取消本次请求，但是该函数的catch() 仍会执行
		  cancel('token 不存在') // 接收一个参数，会传给catch((err) => {}) err.errMsg === 'token 不存在'
		}
		*/
		return config
	})
	http.interceptor.response((response) => {
		/* 请求之后拦截器 */
		let code = (response.data || {}).returnCode;
		switch (code) {
			case 2001:
				if (response.data.msg == '操作失败') {
					uni.showToast({
						title: response.data.msg,
						icon: 'none'
					});
				} else {
					uni.showModal({
						title: '温馨提示',
						content: response.data.msg,
						showCancel: false,
					})
				}
				break;
			case 3001:
				uni.showToast({
					title: response.data.msg,
					icon: 'none'
				});
				store.dispatch('exitlogin');
				setTimeout(() => {
					uni.navigateTo({
						url: '/pages/login/login'
					})
				});
				break;
			case 4001:
				uni.showToast({
					title: response.data.msg,
					icon: 'none'
				});
				store.dispatch('exitlogin');
				setTimeout(() => {
					uni.navigateTo({
						url: '/pages/login/login'
					})
				});
				break;
			default:
				break;
		}
		if (response.data) {
			return response.data.data ? response.data.data : response.data
		} else
			return reject('操作失败');
	}, (response) => { // 请求错误做点什么
		uni.showToast({
			title: '操作失败',
			icon: 'none'
		});
		return {
			returnCode: '2001',
			msg: 'error'
		}
	})
	return http;
};
export default gethttp